package com.ee.chat.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ee.chat.common.entity.UserCreditLog;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Mapper接口
 * </p>
 *
 * @author Shane
 * @since 2019-08-23
 */
public interface UserCreditLogMapper extends BaseMapper<UserCreditLog> {
    /**
     * 获取用户积分记录
     * @Author Shane
     * @Date 2019/10/6 19:01
     * @param
     * @return
     */
    IPage<Map<String, Object>> getCreditLogsByType(Page page, @Param("userId") Integer userId, @Param("type") Integer type);

    IPage<Map<String, Object>> getCreditLogs(Page page, @Param("userId") Integer userId);

    /**
     * 获取用户积分
     * @Author Shane
     * @Date 2019/10/13 23:28
     * @param
     * @return
     */
    double getInviteCreditCount(@Param("userId") Integer userId);

    /**
     * 获取用户邀请收益明细
     * @Author Shane
     * @Date 2019/10/13 23:53
     * @param
     * @return
     */
    IPage<Map<String, Object>> getInviteChargeLog(Page page, @Param("userId") Integer userId);

    /**
     * 获取积分明细列表
     * @Author Shane
     * @Date 2019/10/27 23:30
     * @param
     * @return
     */
    List<Map<String, Object>> list(@Param("userId") Integer userId, @Param("proUserId") Integer proUserId, @Param("type") Integer type,
                                   @Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                   @Param("offset") Long offset, @Param("rows") Integer rows);

    Long listCount(@Param("userId") Integer userId, @Param("proUserId") Integer proUserId, @Param("type") Integer type,
                   @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 根据消费id和类型查询
     * @Author Shane
     * @Date 2019/10/2920:18
     * @param consumId  消费id
     * @param type  类型
     * @return
     **/
    UserCreditLog selectByConsumIdAndType(@Param("consumId") Integer consumId, @Param("type") Integer type);

    /**
     * 获取指定时间段内用户积分统计
     * @Author Shane
     * @Date 2019/12/25 10:19
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return
     **/
    List<Map<String, Object>> getUserCreditStat(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 获取我的报表信息列表
     * @Author AppiJ
     * @Date 2020/3/30 18:37
     * @param userId    用户id
     * @param channelId 渠道id
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return
     */
    IPage<Map<String, Object>> queryReportList(Page page, @Param("userId") Integer userId, @Param("channelId") Integer channelId,
                                               @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 查询积分统计列表
     * @Author AppiJ
     * @Date 2020/8/13 19:23
     * @param
     * @return
     */
    IPage<Map<String, Object>> statisticList(Page page, @Param("userId") Integer userId, @Param("field") String field, @Param("sort") String sort);

    /**
     * 获取人头像所占比例
     * @param userId
     * @return
     */
    Double getUserInviteRegisterRate(@Param("userId") Integer userId);

    /**
     * 获取指定时间之前的指定类型记录
     * @param date
     * @param type
     * @return
     */
    List<UserCreditLog> selectByDateAndType(@Param("date") Date date, @Param("type") Integer type);
}